package com.wch.SpringBootTestDemo.defineTest;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

/**
 * 通过java bean 的方式绑定读取自定义配置文件
 * 在使用的过程中发现对配置文件中的命名前缀规范性特别强，
 * 当前缀中有大写字母时系统跑不起来，前缀要全部使用小写，后面的大小写都可以
 * 配置文件中可以有多个不同前缀的信息，我们只根据我们绑定的java bean选的前缀读取，其他的不影响（例：define.one = one）
 * 或者我们在读取的时候只读取指定前缀下的某些属性，相同前缀下其他字段也不会有影响的（例：definetest.manyTo = many）
 * 在java bean中也可以定义配置文件以外的字段，也是可以的，只是就没有值，需要单独为他赋值，不然打印出来就是null（例：本页中testOnly）
 * 
 * 注意:像我们默认的配置文件 application.properties即使是我们不做任何处理，
 * 系统也能够直接读取到，会自动加载，但是我们自定义的配置文件就需要我们手动加载
 * @author 19821
 * 
 * 对于下面三个注解：
 * 第一个注解是为了让这个java bean可以在springboot项目启动时被扫描并加载导spring容器中
 * 第二个注解：一般不单独使用，与第三个注解一起用，作用就是将指定的前缀的配置项的值与java bean 的字段绑定
 * 为了绑定的成功，一般将字段的名称与配置项键的最后一个键名相同，这样整个键在去掉前缀的情况下就和字段名称一致，以此来进行绑定
 * 第三个注解：指定绑定的自定义配置文件
 */
@Component  
@ConfigurationProperties(prefix="definetest")
@PropertySource("classpath:define.properties")
public class DefineEntity {
	
	private String pname;
	
	private String password;
	
	private String TestUpcase;
	
	private String testOnly;

	public String getPname() {
		return pname;
	}

	public void setPname(String pname) {
		this.pname = pname;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getTestUpcase() {
		return TestUpcase;
	}

	public void setTestUpcase(String testUpcase) {
		TestUpcase = testUpcase;
	}

	public String getTestOnly() {
		return testOnly;
	}

	public void setTestOnly(String testOnly) {
		this.testOnly = testOnly;
	}
	
	
	
	
	
}
